import * as api from '../../api/common';

Page({
  data: {
    ticketItemInfo: {},
    item: {},
    items: [],
    priceId: null,
    quantity: 0,
    price: 0,
    selectedCount: 0,
    userId: null
  },

  async onLoad(options) {
    // options = {
    //   price: "789",
    //   priceId: "14",
    //   quantity: "1",
    // }
    const userInfo = tt.getStorageSync('info');
    if (userInfo) {
      this.setData({
        userId: userInfo.id
      });
    } else {
      tt.showToast({
        title: '用户信息获取失败',
        icon: 'fail'
      });
      return;
    }
    const {
      priceId,
      quantity,
      price
    } = options;
    this.setData({
      priceId,
      quantity: quantity * 1,
      price: parseFloat(price)
    });
    this.getInfo();
  },

  async getInfo() {
    try {
      const {
        data
      } = await api.ticketItemInfo({
        id: this.data.priceId
      });
      const baseUrl = api.baseUrl + '/';

      
      if (data.start_date) {
        let arr = data.start_date.split('-')
        data.start_date_f = arr[0] + '年' + arr[1] + '月' + arr[2] + '日'
      }
      this.setData({
        ticketItemInfo: data
      })
    }  catch (error) {
      console.error('获取票据详情失败', error);
    }
  },

  async onShow() {
    // 加载观演人列表数据
    await this.loadSpectators();
  },

  // 加载观演人列表数据
  async loadSpectators() {
    try {
      const {
        userId
      } = this.data;
      const res = await api.spectator({
        userId
      });
      if (res.data) {
        const items = res.data.map(item => ({
          id: item.id,
          name: item.name,
          idcard: this.processCardNumber(item.idcard), // 处理身份证号码
          checked: item.checked || false // 确保默认值为 false
        }));
        this.setData({
          items: items,
          selectedCount: this.calculateSelectedCount(items) // 初始化已选中人数
        });
      } else {
        console.error('接口返回数据格式错误', res);
      }
    } catch (error) {
      console.error('请求失败', error);
    }
  },

  // 处理支付
  async handlePay() {
    tt.showLoading({
      title: "加载中",
      mask: true
    });

    let orderId = null;
    let orderInfo = null;
    const {
      items,
      priceId,
      quantity,
      userId
    } = this.data;
    // 生成订单参数
    const tickets = items
      .filter(item => item.checked)
      .map(item => ({
        id: priceId,
        count: 1, // 每个观演人1张票
        spectatorId: item.id
      }));
    // 检查是否至少选择一个观演人
    if (!tickets || tickets.length === 0) {
      tt.showToast({
        title: '至少选择一个观演人',
        icon: 'fail'
      });
      return;
    }
    if (tickets.length !== quantity) {
      tt.showToast({
        title: '票数与观演人数不匹配',
        icon: 'fail'
      });
      return;
    }
    const params = {
      userId,
      tickets
    };

    try {
      const data = await api.createOrder(params);
      if (data.code === 1) {
        orderId = data.data;
      } else {
        tt.showToast({
          title: data.data,
          icon: 'fail'
        });
        return;
      }
    } catch (e) {
      tt.showToast({
        title: '创建订单失败',
        icon: 'fail'
      });
      return;
    }
    try {
      const data = await api.pay({
        id: orderId
      });
      if (data.code === 1) {
        if (data.data.err_no === 0) {
          orderInfo = data.data.data;
          if (orderInfo?.order_id && orderInfo?.order_token) {
            tt.pay({
              orderInfo: orderInfo,
              service: 5,
              _debug: 1,
              success(res) {
                if (res.code === 0) {
                  tt.showToast({ title: '支付成功' });
                  tt.navigateTo({
                    url: `../ticket/index`
                  });
                } else if (res.code === 1) {
                  tt.showToast({ title: '支付超时' });
                } else if (res.code === 2) {
                  tt.showToast({ title: '支付失败' });
                } else if (res.code === 4) {
                  tt.showToast({ title: '支付取消' });
                }
              },
              fail(res) {
                console.log(res, 'pay fail')
                tt.showToast({ title: '支付失败' });
              }
            });
          } else {
            tt.showToast({
              title: '支付信息不完整',
              icon: 'fail'
            });
          }
        } else {
          tt.showToast({
            title: '出现错误，稍后再试',
            icon: 'fail'
          });
        }

      } else {
        tt.showToast({
          title: '支付请求失败',
          icon: 'fail'
        });
      }
    } catch (e) {
      console.log(e, 666)
      tt.showToast({
        title: '支付失败',
        icon: 'fail'
      });
    } finally {
      setTimeout(() => {
        tt.hideLoading();
      }, 1000)
    }
  },

  // 处理身份证号码，只显示前三位和后三位
  processCardNumber(cardNumber) {
    if (cardNumber.length >= 6) {
      return cardNumber.substr(0, 3) + '******' + cardNumber.substr(-3);
    }
    return cardNumber; // 如果身份证号码长度小于6，返回原值
  },

  checkboxChange(e) {
    const checkedValues = e.detail.value;
    const {
      items
    } = this.data;

    const updatedItems = items.map(item => ({
      ...item,
      checked: checkedValues.includes(String(item.id)) // 使用 id 检查选中状态
    }));

    this.setData({
      items: updatedItems,
      selectedCount: this.calculateSelectedCount(updatedItems) // 更新已选中人数
    });
  },
  // 计算已选中的观演人数
  calculateSelectedCount(items) {
    return items.filter(item => item.checked).length;
  },
  toAddAudience() {
    tt.navigateTo({
      url: '../addAudience/index',
      success: (res) => {},
      fail: (res) => {},
    });
  }
});